Skip to content

Conversation

@vaind
Copy link
Contributor

@vaind vaind commented Feb 2, 2026

Summary

Migrate from the deprecated action-prepare-release to Craft's reusable workflow.

This is a simplified approach compared to #141, using the reusable workflow pattern recommended in the Craft documentation.

Changes

  • Switch to getsentry/craft/.github/workflows/release.yml@v2 reusable workflow
  • Make version input optional (defaults to auto - inferred from conventional commits)
  • Remove manual token/checkout steps (handled by reusable workflow)

Supersedes #141

🤖 Generated with Claude Code

Switch from action-prepare-release to the Craft reusable workflow,
which is simpler and handles authentication/checkout internally.

- Version input is now optional, defaults to 'auto' (inferred from commits)
- Uses secrets: inherit to pass required credentials

See https://craft.sentry.dev/github-actions/ for documentation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@vaind vaind force-pushed the ci/craft-reusable-workflow branch from 46cbf0a to 78f9dd2 Compare February 2, 2026 11:57
@github-actions
Copy link
Contributor

github-actions bot commented Feb 2, 2026

Warnings
⚠️ Could not load custom Dangerfile: .github/test-dangerfile-curl.js Error: ENOENT: no such file or directory, lstat '/github/workspace/.github/test-dangerfile-curl.js'

Generated by 🚫 dangerJS against 78f9dd2

@vaind vaind merged commit 6e95fba into main Feb 2, 2026
19 checks passed
@vaind vaind deleted the ci/craft-reusable-workflow branch February 2, 2026 13:26
with:
version: ${{ inputs.version || 'auto' }}
force: ${{ inputs.force || 'false' }}
secrets: inherit
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You need the special token for release bot otherwise your releases will fail

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Like this?

GraphQL: Resource not accessible by integration (createIssue)
Error: Process completed with exit code 1.

https://github.com/getsentry/github-workflows/actions/workflows/release.yml

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@BYK I'm confused why do docs say to use the reusable workflow as the recommended way to set up?

image

FWIW I've ran this by Claude and this seams reasonable:

The problem in Craft's release.yml:

This step ONLY runs for the Craft repo itself

- name: Get auth token                                                                                                                                                                                                                                                                                                                
  id: token
  if: github.event_name == 'workflow_dispatch' && github.repository == 'getsentry/craft'
  uses: actions/create-github-app-token@...
  with:
    app-id: ${{ vars.SENTRY_RELEASE_BOT_CLIENT_ID }}
    private-key: ${{ secrets.SENTRY_RELEASE_BOT_PRIVATE_KEY }}

For external repos: uses github.token which can't create issues in getsentry/publish

- name: Prepare release
  if: github.repository != 'getsentry/craft'
  env:
    GITHUB_TOKEN: ${{ github.token }}  # <-- this is the problem

Since secrets: inherit already passes SENTRY_RELEASE_BOT_PRIVATE_KEY through, and vars.SENTRY_RELEASE_BOT_CLIENT_ID is available at the org level, the credentials are already there — Craft just doesn't use them for external repos.

What would need to change in Craft:

  1. Remove the repository guard on the token step — or add a second token step for external repos:
  - name: Get auth token
    id: token
  - if: github.event_name == 'workflow_dispatch' && github.repository == 'getsentry/craft'
  - if: ${{ secrets.SENTRY_RELEASE_BOT_PRIVATE_KEY != '' }}
  1. Use the app token (with fallback) in the external repos step:
- name: Prepare release
  if: github.repository != 'getsentry/craft'
  env:
-      GITHUB_TOKEN: ${{ github.token }}
+      GITHUB_TOKEN: ${{ steps.token.outputs.token || github.token }}
  1. Same for the checkout step (already correct — it does ${{ steps.token.outputs.token || github.token }}).

An alternative Craft-side approach would be to add an explicit token secret to workflow_call:

  workflow_call:
    secrets:
      token:
        description: 'Token with cross-repo issue creation permissions'
        required: false

Then callers would generate the token themselves and pass it. But that's more boilerplate per-repo and defeats the purpose of the reusable workflow simplifying things.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants